package cn.doitedu.hbase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;

import java.io.IOException;

/**
 * DDL : DATA DEFINE LANGUAGE
 * 建表，修改表定义，删表，……
 */
public class DDLDemo {

    public static void main(String[] args) throws IOException {

        // create方法会自动去加载运行时的classpath中的hbase-site.xml等配置文件
        Configuration conf = HBaseConfiguration.create();
        //conf.set("hbase.zookeeper.quorum","doit01:2181,doit02:2181,doit03:2181");

        // 创建一个hbase的客户端连接
        Connection conn = ConnectionFactory.createConnection(conf);
        // 拿到一个DDL的操作工具
        Admin admin = conn.getAdmin();

        /**
         * 建名称空间
         */
        NamespaceDescriptor descriptor = NamespaceDescriptor.create("wonderful_doit").build();
        admin.createNamespace(descriptor);

        /**
         * 建表
         */
        // 创建一个列族描述 构造器
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("f1".getBytes());
        // 通过  列族描述构造器 设置列族的参数
        columnFamilyDescriptorBuilder.setMaxVersions(2);
        // 通过  列族描述构造器，构造一个列族描述对象
        ColumnFamilyDescriptor familyDescriptor = columnFamilyDescriptorBuilder.build();


        // 创建表名对象
        TableName tableName = TableName.valueOf("wonderful_doit:teachers");
        // 创建一个表描述 构造器
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
        // 通过表描述构造器，设置列族
        tableDescriptorBuilder.setColumnFamily(familyDescriptor);
        // 通过表描述构造器，创建一个表描述对象
        TableDescriptor tableDescriptor = tableDescriptorBuilder.build();

        // 用admin来创建这个表
        admin.createTable(tableDescriptor);

        // 关闭客户端工具
        admin.close();
        conn.close();
    }
}
